package bean;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.html.HtmlInputText;

import mensagem.MsgReceita;
import session.SessionItemReceita;
import session.SessionProduto;
import session.SessionReceita;
import entity.ItemReceita;
import entity.Produto;
import entity.Receita;

@ManagedBean
@SessionScoped
public class BeanReceita {

	private Receita receita = new Receita();

	private Receita filtro = new Receita();

	private List<Receita> receitas = new ArrayList<Receita>();

	private Produto produto = new Produto();

	private Produto insumo = new Produto();

	private ItemReceita item = new ItemReceita();

	private List<ItemReceita> itens = new ArrayList<ItemReceita>();

	private SessionReceita session = new SessionReceita();

	private SessionProduto sessionP = new SessionProduto();

	private SessionItemReceita sessionItem = new SessionItemReceita();

	private HtmlInputText nomeProduto;

	private HtmlInputText nomeInsumo;

	private int inicia;

	private BeanProduto beanProduto = new BeanProduto();

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public BeanReceita() {

	}

	// //////////////////////////CONSTRUCTOR//////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public Receita getReceita() {
		return receita;
	}

	public void setReceita(Receita receita) {
		this.receita = receita;
	}

	public BeanProduto getBeanProduto() {
		return beanProduto;
	}

	public void setBeanProduto(BeanProduto beanProduto) {
		this.beanProduto = beanProduto;
	}

	public HtmlInputText getNomeInsumo() {
		return nomeInsumo;
	}

	public void setNomeInsumo(HtmlInputText nomeInsumo) {
		this.nomeInsumo = nomeInsumo;
	}

	public int getInicia() {
		this.reinit();
		return inicia;
	}

	public void setInicia(int inicia) {
		this.inicia = inicia;
	}

	public HtmlInputText getNomeProduto() {
		return nomeProduto;
	}

	public void setNomeProduto(HtmlInputText nomeProduto) {
		this.nomeProduto = nomeProduto;
	}

	public ItemReceita getItem() {
		return item;
	}

	public void setItem(ItemReceita item) {
		this.item = item;
	}

	public Produto getInsumo() {
		return insumo;
	}

	public void setInsumo(Produto insumo) {
		this.insumo = insumo;
	}

	public Receita getFiltro() {
		return filtro;
	}

	public void setFiltro(Receita filtro) {
		this.filtro = filtro;
	}

	public List<Receita> getReceitas() {
		return receitas;
	}

	public void setReceitas(List<Receita> receitas) {
		this.receitas = receitas;
	}

	public Produto getProduto() {
		return produto;
	}

	public void setProduto(Produto produto) {
		this.produto = produto;
	}

	public List<ItemReceita> getItens() {
		return itens;
	}

	public void setItens(List<ItemReceita> itens) {
		this.itens = itens;
	}

	public SessionReceita getSession() {
		return session;
	}

	public void setSession(SessionReceita session) {
		this.session = session;
	}

	public SessionProduto getSessionP() {
		return sessionP;
	}

	public void setSessionP(SessionProduto sessionP) {
		this.sessionP = sessionP;
	}

	public SessionItemReceita getSessionItem() {
		return sessionItem;
	}

	public void setSessionItem(SessionItemReceita sessionItem) {
		this.sessionItem = sessionItem;
	}

	// ///////////////////////////////METODOS/////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////
	// ///////////////////////////////////////////////////////////////////////////

	public void reinit() {
		this.receita = new Receita();
		this.filtro = new Receita();
		this.receitas = new ArrayList<Receita>();
		this.produto = new Produto();
		this.itens = new ArrayList<ItemReceita>();
		this.item = new ItemReceita();
		this.insumo = new Produto();
	}

	public void reinitParcial() {
		this.receita = new Receita();
		this.item = new ItemReceita();
		this.insumo = new Produto();
	}

	public String save() throws Exception {
		this.receita.setProduto(this.produto);
		if (this.receita.getId() != null) {
			return this.update();
		} else {
			if (this.session.save(this.receita)) {
				for (int i = 0; i < itens.size(); i++) {
					itens.get(i).setReceita(this.receita);
					sessionItem.save(itens.get(i));
				}
				this.reinit();
				MsgReceita.msgSave();
			}
		}
		return "";
	}

	public String update() throws Exception {
		if (this.session.update(this.receita)) {
			for (int i = 0; i < itens.size(); i++) {
				sessionItem.update(itens.get(i));
			}
			this.reinit();
			MsgReceita.msgUpdate();
		}
		return null;
	}

	public String remove() {
		try {
			this.session.remove(receita);
			MsgReceita.msgRemove();
		} catch (Exception e) {
			MsgReceita.msgNotRemove();
		}
		return null;
	}

	public void find() throws Exception {
		this.receitas = this.session.getController().findList(filtro);
	}

	public void addItem() {
		this.item.setProduto(this.insumo);
		this.itens.add(item);
		this.reinitParcial();
	}

	public void removeItem() {
		this.itens.remove(item);
	}

	public String hotFindProduto() {
		if (this.receita.getProduto() != null) {
			if ((this.receita.getProduto().getId() != null)
					&& (this.receita.getProduto().getDescricao() != null)) {
				int aux = this.receita.getProduto().getId();
				this.receita.setProduto(new Produto());
				this.receita.getProduto().setId(aux);
			}
		}

		if ((this.receita.getProduto() != null)
				&& (this.receita.getProduto().getId() != null)) {
			try {
				this.receita.setProduto(this.sessionP.getController().find(
						this.receita.getProduto()));
			} catch (Exception e) {
				this.receita.setProduto(new Produto());
			}
			if ((this.receita.getProduto() != null)
					&& (receita.getProduto().getDescricao() != null)) {
				this.nomeProduto.setValue(receita.getProduto().getDescricao());
				return null;
			}
		}
		this.receita.setProduto(new Produto());
		return null;
	}

	public String hotFindInsumo() {

		if (this.getInsumo() != null) {
			if ((this.getInsumo().getId() != null)
					&& (this.getInsumo().getDescricao() != null)) {
				int aux = this.getInsumo().getId();
				this.setInsumo(new Produto());
				this.getInsumo().setId(aux);
			}
		}

		if ((this.getInsumo() != null) && (this.getInsumo().getId() != null)) {
			try {
				this.setInsumo(this.sessionP.getController().find(
						this.getInsumo()));
			} catch (Exception e) {
				this.setInsumo(new Produto());
			}
			if ((this.getInsumo() != null)
					&& (this.getInsumo().getDescricao() != null)) {
				this.nomeProduto.setValue(this.getInsumo().getDescricao());
				return null;
			}
		}
		this.setInsumo(new Produto());
		return null;
	}

}
